package dataClean;

import java.sql.DriverManager;
import java.sql.SQLException;//用来排错
import java.sql.Statement;//帮助
import java.text.SimpleDateFormat;
import java.util.Date;//日期
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

/**
 * @author Smartloe
 * @create 2021-05-04 14:00
 */

/*
(一)先在MYSQL中实现自动添加每行时间戳的命令。目的是只要每行有修改，则自动更改该行的时间戳。实现数据的更新。
该设计思想可以用于实现数据的增量更新。根据时间戳作为时间点来提取。
alter table kettletxt add update_time timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
（二）
数据库导入数据后发现没有自增 id，因此就有了这个解决方案。
1、给某一张表先增加一个字段,这里我们就以 kettletxt 这张表来举例，在数据库命令行输入下面指令 ：
alter table kettletxt add id int
2、更改 id 字段属性为自增属性，在数据库命令行输入下面指令 ：
alter table `kettletxt` change id id int not null auto_increment primary key;
 */
public class DataDynamicInsert extends TimerTask {

    public static void main(String[] args) {
        // //起定时器，每2秒查询一次
        Timer timer = new Timer();
        DataDynamicInsert t = new DataDynamicInsert();
        timer.schedule(t ,0,2000);
    }

    //由于继承了抽象类TimerTask，所以需要实现run()方法。用于调用MYSQL_CONN.demo()实现数据库实时调用。
    public void run(){
        DataDynamicInsert.MYSQL_CONN.demo1();
    }

    static class MYSQL_CONN{
        // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
//        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        //这个是安全连接的问题，在sql连接字符串中，添加关于不使用SSL访问数据数据库的说明：useSSL=false。
//        static final String DB_URL = "jdbc:mysql://localhost:3306/test?&useSSL=false";

        //MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL
        static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&serverTimezone=UTC";


        // 数据库的用户名与密码，需要根据自己的设置
        static final String USER = "root";
        static final String PASS = "147258";
        public static void demo1(){
            Statement stmt = null;
            java.sql.Connection conn = null;
            try{
                // 注册 JDBC 驱动
                Class.forName(JDBC_DRIVER);

                // 打开链接
                System.out.println("连接数据库...");
                conn = DriverManager.getConnection(DB_URL,USER,PASS);

                // 执行查询
                System.out.println(" 实例化Statement对象...");
                stmt = conn.createStatement();
                String sql;

                String[] str = {"jan","feb","mar","apri","may","june","july","aug","sep","oct","nov","dem"};

                Random r = new Random();
                int num1 = r.nextInt(11);
                int num2 =r.nextInt(999);
                Date dNow = new Date( );
                SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//                sql = "insert into kettletxt values ('"+str[num1]+"','"+num2+"','2020-5-5')";
//                sql = "insert into kettletxt values ('jan','009','2020-5-5')";
                sql = "insert into kettletxt (month, code ,date) values ('"+str[num1]+"','"+num2+"','"+ft.format(dNow)+"')";
                stmt.execute(sql);
                stmt.close();
                conn.close();
            }catch(
                    SQLException se){
                // 处理 JDBC 错误
                se.printStackTrace();
            }catch(Exception e){
                // 处理 Class.forName 错误
                e.printStackTrace();
            }finally{
                // 关闭资源
                try{
                    if(stmt!=null) stmt.close();
                }catch(SQLException se2){
                }// 什么都不做
                try{
                    if(conn!=null) conn.close();
                }catch(SQLException se){
                    se.printStackTrace();
                }
            }
            System.out.println("Goodbye!");
        }
    }
}
